Zabbix 生产案例实战
一、项目规划
1、主机分组:
交换机
Nginx
Tomcat
MySQL
2、监控对象识别:
1、使用 SNMP 监控交换机
2、使用 IPMI 监控服务器硬件
3、使用 Agent 监控服务器
4、使用 JMX 监控 Java 应用
5、监控 MySQL
6、监控 Web 状态
7、监控 Nginx 状态
3、操作步骤:
SNMP 监控
1.1 在交换机上开启Snmp
config t
snmp-server community public ro
end
提示:如果不知道我们可以百度
####1.2 在 Zabbix 上添加SNMP 监控
步骤:Configuration--->Hosts---> 设置
1.3 Host 页面设置
1.4 Templates 模板设置
设置 SNMP 团体名称 Macros 宏
这里的设置要跟我们创建的 SNMP
的设置相同
因为 Zabbix 监控的时候依赖团体名称
1.5 生产图片
Zabbix 会自动给我们进行检测端口,每个端口都会添加一个网卡的流量图,每个端口都会加上一个触发器。(端口的状态
) 还会帮我们添加VLAN
的一个监控
1.6 案例图
含有有进口和出口流量
提示:此图是 Zabbix SNMP
模板自动生成的
IPMI 监控
2.1 添加 IPMI
Configuration--->Hosts---> 选择主机 ---> 设置 IPMI 端口及主机 ---> 用户名密码
因为 IMP 容易超时,建议使用自定义 item
,本地执行ipmitool
命令来获取数据
JMX 监控
Zabbix 默认提供了一个监控 JMX, 通过 java gateway 来监控 java
地址:https://www.zabbix.com/documentation/3.2/manual/appendix/config/zabbix_java
JAVA GATEWAY
需要独立安装,相当于一个网关,因为 zabbix_server 和 zabbix-agent 不可以直接获取 java 信息。所以需要一个代理来获取
zabbix java Gateway
不存任何数据, 只是一个简单的代理
1、安装
[root@linux-node1 ~]# yum install -y zabbix-java-gateway java-1.8.0
提示:java-gateway 需要 java 环境
2、配置
修改 java-gateway
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_java_gateway.conf
# LISTEN_IP="0.0.0.0" 监听的 IP 地址
# LISTEN_PORT=10052 监听的端口
PID_FILE="/var/run/zabbix/zabbix_java.pid" 存放 pid 路径
# START_POLLERS=5 开通几个进程, 默认是 5。你有多少 java 进行可以设置多少个,也可以设置 java 进程的一半。
TIMEOUT=3 超时时间 1-30,如果网络环境差,超时时间就修改长一点
我们默认就可以了,不进行修改
3、启动
[root@linux-node1 ~]# systemctl start zabbix-java-gateway.service
4、端口、进程查看
我们可以进行进程的查看
[root@linux-node1 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp0 0 0.0.0.0:33060.0.0.0:* LISTEN 10439/mysqld
tcp0 0 0.0.0.0:80800.0.0.0:* LISTEN 33484/nginx: master
tcp0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1054/sshd
tcp0 0 127.0.0.1:250.0.0.0:* LISTEN 2484/master
tcp0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 76482/zabbix_agentd
tcp0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 34572/zabbix_server
tcp0 0 127.0.0.1:199 0.0.0.0:* LISTEN 11143/snmpd
tcp6 0 0 :::80 :::*LISTEN 10546/httpd
tcp6 0 0 :::22 :::*LISTEN 1054/sshd
tcp6 0 0 ::1:25 :::*LISTEN 2484/master
tcp6 0 0 :::10050:::*LISTEN 76482/zabbix_agentd
tcp6 0 0 :::10051:::*LISTEN 34572/zabbix_server
tcp6 0 0 :::10052:::*LISTEN 13465/java
10052
zabbix-java-gateway
默认端口已经起来了!
它是一个 java 应用,需要安装 jdk
[root@linux-node1 ~]# ps -aux|grep java
root 13465 0.4 3.4 2248944 34060 ? Sl 19:17 0:01 java -server -Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-3.0.4.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -Dzabbix.timeout=3 -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
root 13584 0.0 0.0 112648 972 pts/0S+ 19:21 0:00 grep --color=auto java
5、通知 zabbix-server
我们需要通知 zabbix-server
,java-gateway
在哪里
修改配置文件
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_server.conf
编辑 zabbix-server 来指定 zabbix-java-gateway
JavaGateway=192.168.56.11 #IP 地址是安装 java-gateway 的服务器
# JavaGatewayPort=10052 端口,默认就可以
StartVMwareCollectors=5 预启动多少个进程[zabbix--->java-gateway 的数量]
6、重启 zabbix-server
[root@linux-node1 ~]# systemctl restart zabbix-server.service
7、准备 apache
我们安装 tomcat-8 版本
官网:http://tomcat.apache.org
下载软件包
[root@linux-node2 src]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.5/bin/apache-tomcat-8.5.5.tar.gz
我们将 tomcat 安装在 apache 服务器上,来模拟监控 jvm
[root@linux-node2 src]# tar xf apache-tomcat-8.5.5.tar.gz
[root@linux-node2 src]# mv apache-tomcat-8.5.5 /usr/local/
[root@linux-node2 src]# ln -s /usr/local/apache-tomcat-8.5.5/ /usr/local/tomcat
[root@linux-node2 src]# yum install -y java-1.8.0#tomcat 需要在 java 环境运行
[root@linux-node2 src]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:/usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
在 web2 上面查看运行状态
[root@linux-node2 src]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1073/sshd
tcp0 0 127.0.0.1:250.0.0.0:* LISTEN 2498/master
tcp0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 10088/zabbix_agentd
tcp6 0 0 :::8080 :::*LISTEN 25750/java
tcp6 0 0 :::22 :::*LISTEN 1073/sshd
tcp6 0 0 ::1:25 :::*LISTEN 2498/master
tcp6 0 0 :::10050:::*LISTEN 10088/zabbix_agentd
tcp6 0 0 127.0.0.1:8005 :::*LISTEN 25750/java
tcp6 0 0 :::8009 :::*LISTEN 25750/java
JMX 三种类型:
1. 无密码认证
2. 用户面密码认证
3.ssl
开启 JMX 远程监控
官方文档:http://tomcat.apache.org/tomcat-8.0-doc/monitoring.html
我们创建一个无密码认证
[root@linux-node2 src]# vim /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888 #端口号
-Dcom.sun.management.jmxremote.ssl=false #SSL 关闭
-Dcom.sun.management.jmxremote.authenticate=false #用户密码验证关闭
-Djava.rmi.server.hostname=192.168.56.12" #监控的主机
修改完成后重启 tomcat
可以使用 ./shutdown.sh
或者使用kill
的方式
[root@linux-node2 src]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:/usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
中间可以使用 px -aux|grep java 查看是否被杀死
[root@linux-node2 src]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:/usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
我们 JMX 端口设置为 8888
[root@linux-node2 src]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1073/sshd
tcp0 0 127.0.0.1:250.0.0.0:* LISTEN 2498/master
tcp0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 10088/zabbix_agentd
tcp6 0 0 :::8080 :::*LISTEN 26226/java
tcp6 0 0 :::22 :::*LISTEN 1073/sshd
tcp6 0 0 :::8888 :::*LISTEN 26226/java
tcp6 0 0 ::1:25 :::*LISTEN 2498/master
tcp6 0 0 :::10050:::*LISTEN 10088/zabbix_agentd
tcp6 0 0 :::38532:::*LISTEN 26226/java
tcp6 0 0 127.0.0.1:8005 :::*LISTEN 26226/java
tcp6 0 0 :::8009 :::*LISTEN 26226/java
tcp6 0 0 :::38377:::*LISTEN 26226/java
我们可以在 windows 上面安装 jdk ,使用命令行来监控 java
我们下载安装,具体步骤不说了,然后我们找到 jconsole.exe
文件运行
填写安装 JMX 的服务器
因为在配置文件中我们设置的是无密码认证,所以这里不需要输入密码直接连接。端口号我们设置的是 8888 连接即可
这样我们就可以在图形化监控 tomcat
提示:按照现在观察,java-gateway 已经安装成功,我们可以加入到 zabbix 中
找我们要添加的主机
填写安装 java-gateway 的主机
我们还需要设置一个模板
这个模板就是我们自带的一个监控 JMX
的模板,然后我们点击Update
. 更新
我们需要等待一会才可以出图
提示:可以在 Zabbix-server 上使用 zabbix-get 获取某一台机器的某一个 key , 效果图如下:需要等待一会
手动检测监控状态
Zabbix-Server 操作:
[root@linux-node1 ~]# yum install -y zabbix-get
Key:
我们随便找一个 key,然后我们复制后面的 key
[root@linux-node1 ~]# zabbix_get -s 192.168.56.12 -k jmx["java.lang:type=Runtime",Uptime]
ZBX_NOTSUPPORTED: Unsupported item key.
提示:未支持的 key,现在并不能获取到这个 key 因为没有获取到这个值,所以不会显示。我们可以获取别的试一下
[root@linux-node1 ~]# zabbix_get -s 192.168.56.12 -k system.cpu.util[,user]
0.079323
[root@linux-node1 ~]# zabbix_get -s 192.168.56.12 -k system.cpu.util[,user]
0.075377
[root@linux-node1 ~]# zabbix_get -s 192.168.56.12 -k system.cpu.util[,user]
0.075377
[root@linux-node1 ~]# zabbix_get -s 192.168.56.12 -k system.cpu.util[,user]
0.073547
小结: Zabbix 其实就是通过 zabbix_get 获取到的这个值进行比较的
日志
开启 zabbix debug 模式
[root@linux-node2 tomcat]# systemctl restart zabbix-agent
### Option: DebugLevel
# Specifies debug level:
# 0 - basic information about starting and stopping of Zabbix processes
# 1 - critical information
# 2 - error information
# 3 - warnings
# 4 - for debugging (produces lots of information)
# 5 - extended debugging (produces even more information)
DebugLevel=4
如果及别是 4
就是 debug
模式,修改完配置文件之后需要重启生效
Zabbix 生产案例
1. 开启 Nginx 监控
2. 编写脚本来进行数据采集
3. 设置用户自定义参数
4. 重启 zabbix-agent
5. 添加 item
6. 创建图形
7. 创建触发器
8. 创建模板
实践步骤
脚本编写: 我们这里提供已经写好的脚本, 链接:https://pan.baidu.com/s/19JrCetaRZYGY_mvq4CyoJQ 密码:94us
需要修改一下
zabbix-agent
的配置文件vim /etc/zabbix/zabbix_agentd.conf
修改 Include 设置, 这样我们可以把脚本放在这个目录下。配置就是.conf 结尾
Include=/etc/zabbix/zabbix_agentd.d/*.conf
3. 添加权限及测试脚本
[root@linux-node1 zabbix_agentd.d]# chmod +x zabbix_linux_plugin.sh
[root@linux-node1 zabbix_agentd.d]# sh zabbix_linux_plugin.sh
Usage: zabbix_linux_plugin.sh {tcp_status key|memcached_status key|redis_status key|nginx_status key}
提示: 这个脚本要用 zabbix
用户执行的权限,因为都是 zabbix
用户在执行,监控 TCP
会在 /tmp/
目录生成一个文件用于监控使用
4. 修改 nginx 配置文件
提示:nginx 默认路径是 /usr/local/nginx 编译安装需要查看安装路径
[root@linux-node1 zabbix_agentd.d]# vim /usr/local/nginx/conf/nginx.conf
location /nginx_status {
stub_status on;
allow 127.0.0.1;
access_log off;
}
因为脚本的 url 是 nginx_status 所以我们配置文件也要这样修改
测试脚本
[root@linux-node1 zabbix_agentd.d]# curl 192.168.56.11:8080/nginx_status
Active connections: 1
server accepts handled requests
2823682 2823682 2821835
Reading: 0 Writing: 1 Waiting: 0
[root@linux-node1 zabbix_agentd.d]# ./zabbix_linux_plugin.sh nginx_status 8080 active
1
[root@linux-node1 zabbix_agentd.d]# ./zabbix_linux_plugin.sh nginx_status 8080 reading
0
[root@linux-node1 zabbix_agentd.d]# ./zabbix_linux_plugin.sh nginx_status 8080 handled
2823688
设置 Key
,首先是Key
的名称
[root@linux-node1 zabbix_agentd.d]# cat linux.conf
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh "$1" "$2" "$3"
[*]代表一个传参,可以将后面的 $1,$2,$3 引入进行
,后面是脚步本的路径
需要重启 agent
[root@linux-node1 zabbix_agentd.d]# systemctl restart zabbix-agent
我们使用 zabbix_get 进行测试
[root@linux-node1 zabbix_agentd.d]# zabbix_get -s 192.168.56.11 -k linux_status[nginx_status,8080,active]
1
[-k] 就是指定 key 不细说了
[*] * 的作用在 web 界面配置 item 会显示出来
5.Zabbix web 界面设置
我们需要添加 item,因为要加好多。我们就使用模板的方式进行添加
提示:我们写一下注释然后选择 Add 即可
找到我们的模板
我们创建 item
创建
各参数前文都有讲解不细说!
修改完成吼点击 Add
添加完成后我们要复制很多个用来监控 Nginx status 的所有状态,所以我们使用克隆。来克隆多个进行设置
点进我们的 item,然后拖到最下面选择克隆
填一些基本的修改即可,例如下:
添加完成如下图:
item 添加完成我们还需要添加一个图形,用于展示,找到图形路径。点击创建
因为我们主机还没有加入我们的模板,所以我们这里是没有数据的
下面将模板加入到主机中
修改模板
查看结果如下:
6. 导出模板
因为设置模板比较麻烦,我们可以将模板导出
导出之后我们需要修改名称就可以了
7. 导入模板
我们需要导出自然需要导入,操作如下:
点击添加即可
提示: 模板之间的名称不可以相同
以上就是 Nginx 完整的监控使用
8. 导入 TCP 模板
加入模板的步骤跟刚刚加入 Nginx
的一样,这里我们就使用模板了。
下载链接:http://pan.baidu.com/s/1i54ULjJ 密码:25lh
我们导入模板即可
导入完成之后我们可以查看模板
在里面我们可以见到 TCP 的 11 种状态,这个 item
是我们需要根据我们脚本进行同步的。
我们可以随便点击一个进行查看,其中这里的 key 要和脚本的相同
我们在两台服务器都加载这个模板
步骤和上面的一样
添加完成
查看脚本需要等待 1 分钟,这主要看我们设置的获取值的时间而定。
我们可以查看图形
更多内容请看下集!~